//package net.jsoft.pms.service.oracle.plan.impl;
//
//import java.io.InputStream;
//import java.text.ParseException;
//import java.text.SimpleDateFormat;
//import java.util.ArrayList;
//import java.util.Calendar;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import net.jsoft.pms.mapper.plan.PlanMapper;
//import net.jsoft.pms.service.oracle.plan.IPlanService;
//import net.jsoft.pms.util.ReadProjectMpp;
//import net.jsoft.pms.vo.plan.PlanTaskInfo;
//import net.sf.mpxj.ProjectFile;
//import net.sf.mpxj.Resource;
//import net.sf.mpxj.ResourceAssignment;
//import net.sf.mpxj.Task;
//
///**
// * 计划管理Dao
// *
// * @author John
// * @Date 2017-08-03 15:51:51
// */
//@Service
//public class PlanServiceImpl implements IPlanService
//{
//
//    //    private String path = "D:/tax/电子税务局/K文档类/电子税务局/1.工作库/0.项目管理/03.计划及进度管理/01.总体计划/01.电子税务局综合管理系统/电子税务局局端系统开发计划.mpp";
//
//    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
//
//    @Autowired
//    private PlanMapper mapper;
//
//    @Override
//    public Map<String, Object> getAllTasks()
//    {
//        Map<String, Object> resp = new HashMap<String, Object>();
//        //        List<PlanTaskInfo> planTasks = new ArrayList<PlanTaskInfo>();
//        //        List<Task> task = new ArrayList<Task>();
//        //        ProjectFile project = null;
//        //
//        //        PlanTaskInfo pt = null;
//        //        try
//        //        {
//        //            project = ReadProjectMpp.readFile(path);
//        //            task = project.getAllTasks();
//        //            //            d = formatter.parse(programEndDate);
//        //        }
//        //        catch (Exception e)
//        //        {
//        //            e.printStackTrace();
//        //        }
//        //        for (Task t : task)
//        //        {
//        //            if (StringUtils.isEmpty(t.getName()))
//        //            {
//        //                continue;
//        //            }
//        //            List<ResourceAssignment> l = t.getResourceAssignments();
//        //            // 拥有资源
//        //            for (ResourceAssignment ra : l)
//        //            {
//        //                Resource r = ra.getResource();
//        //                if (r != null)
//        //                {
//        //                    pt = new PlanTaskInfo();
//        //                    pt.setId(UUID.randomUUID().toString());
//        //                    pt.setSource(t.getOutlineCode(1));
//        //                    pt.setGroupName(t.getOutlineCode(2));
//        //                    pt.setType(t.getOutlineCode(3));
//        //                    pt.setInterfaceName(t.getText(4));
//        //                    pt.setRegion(t.getText(12));
//        //                    pt.setName(t.getName());
//        //
//        //                    pt.setEarlyStart(t.getEarlyStart());
//        //                    pt.setEarlyFinish(t.getEarlyFinish());
//        //                    pt.setLateStart(t.getActualStart());
//        //                    pt.setLateFinish(t.getActualFinish());
//        //                    pt.setEarlyVersion(t.getText(9));
//        //                    pt.setVersionDate(t.getDate(1));
//        //                    pt.setLateVersion(t.getText(10));
//        //                    pt.setNotes(t.getNotes());
//        //                    pt.setProblemsId(t.getText(5));
//        //                    if (t.getPercentageComplete() != null)
//        //                    {
//        //                        pt.setPercentageComplete(t.getPercentageComplete().doubleValue() + "");
//        //                    }
//        //                    else
//        //                    {
//        //                        pt.setPercentageComplete(0.00 + "");
//        //                    }
//        //                    if (pt.getLateFinish() == null)//&& d != null && t.getLateFinish().equals(d))
//        //                    {
//        //                        pt.setFinishFlag("未完成");
//        //                    }
//        //                    else
//        //                    {
//        //                        pt.setFinishFlag("完成");
//        //                    }
//        //
//        //                    planTasks.add(pt);
//        //                    pt.setResourceName(r.getName());
//        //                }
//        //            }
//        //
//        //        }
//        //        resp.put("planTasks", planTasks);
//        //        resp.put("project", project);
//
//        return resp;
//    }
//
//    @Override
//    public Map<String, List<PlanTaskInfo>> groupTasks(List<PlanTaskInfo> tasks)
//    {
//        Map<String, List<PlanTaskInfo>> map = new HashMap<String, List<PlanTaskInfo>>();
//        Map<String, List<PlanTaskInfo>> returnMap = new HashMap<String, List<PlanTaskInfo>>();
//        for (PlanTaskInfo p : tasks)
//        {
//            if (map.containsKey(p.getGroupName()))
//            {
//                List<PlanTaskInfo> newList = map.get(p.getGroupName());
//                newList.add(p);
//                map.put(p.getGroupName(), newList);
//            }
//            else
//            {
//                List<PlanTaskInfo> newList = new ArrayList<PlanTaskInfo>();
//                newList.add(p);
//                map.put(p.getGroupName(), newList);
//            }
//        }
//        returnMap.put("tasks", map.get("办税组") != null ? map.get("办税组") : new ArrayList<PlanTaskInfo>());
//        returnMap.put("tasks1", map.get("报税组") != null ? map.get("报税组") : new ArrayList<PlanTaskInfo>());
//        returnMap.put("tasks2", map.get("消息与权限组") != null ? map.get("消息与权限组") : new ArrayList<PlanTaskInfo>());
//        return returnMap;
//    }
//
//    @Override
//    public List<PlanTaskInfo> getPeriodTasks(List<PlanTaskInfo> tasks, Date start, Date end)
//    {
//        List<PlanTaskInfo> taskList = new ArrayList<PlanTaskInfo>();
//        List<Date> dates = findDates(start, end);
//        for (PlanTaskInfo t : tasks)
//        {
//            Calendar cal1 = Calendar.getInstance();
//            cal1.setTime(t.getEarlyStart());
//            cal1.set(Calendar.HOUR_OF_DAY, 0);
//            cal1.set(Calendar.MINUTE, 0);
//            cal1.set(Calendar.SECOND, 0);
//            cal1.set(Calendar.MILLISECOND, 0);
//
//            Calendar cal2 = Calendar.getInstance();
//            cal2.setTime(t.getEarlyFinish());
//            cal2.set(Calendar.HOUR_OF_DAY, 0);
//            cal2.set(Calendar.MINUTE, 0);
//            cal2.set(Calendar.SECOND, 0);
//            cal2.set(Calendar.MILLISECOND, 0);
//            if (dates.contains(cal1.getTime()) || dates.contains(cal2.getTime()))
//            {
//                if (t.getCreateDate().before(start))
//                {
//                    t.setPlanType("0"); //计划内
//                }
//                else
//                {
//                    t.setPlanType("1"); //计划外
//                }
//                taskList.add(t);
//            }
//        }
//        return taskList;
//    }
//
//    // JAVA获取某段时间内的所有日期
//    public static List<Date> findDates(Date dBegin, Date dEnd)
//    {
//        List<Date> lDate = new ArrayList<Date>();
//        lDate.add(dBegin);
//        Calendar calBegin = Calendar.getInstance();
//        // 使用给定的 Date 设置此 Calendar 的时间
//        calBegin.setTime(dBegin);
//        Calendar calEnd = Calendar.getInstance();
//        // 使用给定的 Date 设置此 Calendar 的时间
//        calEnd.setTime(dEnd);
//        // 测试此日期是否在指定日期之后
//        while (dEnd.after(calBegin.getTime()))
//        {
//            // 根据日历的规则，为给定的日历字段添加或减去指定的时间量
//            calBegin.add(Calendar.DAY_OF_MONTH, 1);
//            lDate.add(calBegin.getTime());
//        }
//        return lDate;
//    }
//
//    @Override
//    public Map<String, List<PlanTaskInfo>> groupbyFinishFlag(List<PlanTaskInfo> list)
//    {
//        List<PlanTaskInfo> finished = new ArrayList<PlanTaskInfo>();
//        List<PlanTaskInfo> unfinished = new ArrayList<PlanTaskInfo>();
//        Map<String, List<PlanTaskInfo>> map = new HashMap<String, List<PlanTaskInfo>>();
//        for (PlanTaskInfo p : list)
//        {
//            if ("完成".equals(p.getFinishFlag()))
//            {
//                finished.add(p);
//            }
//            else
//            {
//                unfinished.add(p);
//            }
//
//        }
//        map.put("finished", finished);
//        map.put("unfinished", unfinished);
//        return map;
//    }
//
//    @Override
//    public Map<String, Date> getDays(Date date)
//    {
//        if (date == null)
//        {
//            date = new Date();
//        }
//        Map<String, Date> map = new HashMap<String, Date>();
//        Calendar cal = Calendar.getInstance();
//        try
//        {
//            cal.setTime(sdf.parse(sdf.format(date)));
//        }
//        catch (ParseException e)
//        {
//            e.printStackTrace();
//        }
//        map.put("today", cal.getTime());
//
//        // 判断要计算的日期是否是周日，如果是则减一天计算周六的，否则会出问题，计算到下一周去了
//        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
//        if (1 == dayWeek)
//        {
//            cal.add(Calendar.DAY_OF_MONTH, -1);
//        }
//        cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天，按中国的习惯一个星期的第一天是星期一
//        int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
//        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则，给当前日期减去星期几与一个星期第一天的差值
//        map.put("thisWeekMonday", cal.getTime());
//        cal.add(Calendar.DATE, -7); // 上星期一
//        map.put("lastWeekMonday", cal.getTime());
//        cal.add(Calendar.DATE, 14); // 下星期一
//        map.put("nextWeekMonday", cal.getTime());
//        cal.add(Calendar.DATE, 6); // 下星期日
//        map.put("nextWeekSunday", cal.getTime());
//        cal.add(Calendar.DATE, -7); // 本星期日
//        map.put("thisWeekSunday", cal.getTime());
//        cal.add(Calendar.DATE, -7); // 上星期日
//        map.put("lastWeekSunday", cal.getTime());
//        return map;
//    }
//
//    @Override
//    public void batchImport(InputStream inputStream)
//    {
//        List<PlanTaskInfo> planTasks = new ArrayList<PlanTaskInfo>();
//        List<Task> task = new ArrayList<Task>();
//        ProjectFile project = null;
//
//        PlanTaskInfo pt = null;
//        try
//        {
//            project = ReadProjectMpp.readFile(inputStream);
//            task = project.getAllTasks();
//        }
//        catch (Exception e)
//        {
//            e.printStackTrace();
//        }
//        for (Task t : task)
//        {
//            if (StringUtils.isEmpty(t.getName()))
//            {
//                continue;
//            }
//            List<ResourceAssignment> l = t.getResourceAssignments();
//            // 拥有资源
//            for (ResourceAssignment ra : l)
//            {
//                Resource r = ra.getResource();
//                if (r != null)
//                {
//                    pt = new PlanTaskInfo();
//                    pt.setId(t.getID());
//                    pt.setSource(t.getOutlineCode(1));
//                    pt.setGroupName(t.getOutlineCode(2));
//                    pt.setType(t.getOutlineCode(3));
//                    pt.setInterfaceName(t.getText(4));
//                    pt.setRegion(t.getText(12));
//                    pt.setName(t.getName());
//
//                    pt.setEarlyStart(t.getEarlyStart());
//                    pt.setEarlyFinish(t.getEarlyFinish());
//                    pt.setLateStart(t.getActualStart());
//                    pt.setLateFinish(t.getActualFinish());
//                    pt.setEarlyVersion(t.getText(9));
//                    pt.setVersionDate(t.getDate(1));
//                    pt.setLateVersion(t.getText(10));
//                    pt.setNotes(t.getNotes());
//                    pt.setProblemsId(t.getText(5));
//                    if (t.getPercentageComplete() != null)
//                    {
//                        pt.setPercentageComplete(t.getPercentageComplete().doubleValue() + "");
//                    }
//                    else
//                    {
//                        pt.setPercentageComplete(0.00 + "");
//                    }
//                    if (pt.getLateFinish() == null)//&& d != null && t.getLateFinish().equals(d))
//                    {
//                        pt.setFinishFlag("未完成");
//                    }
//                    else
//                    {
//                        pt.setFinishFlag("完成");
//                    }
//
//                    pt.setCreateDate(t.getCreateDate());
//                    pt.setStopDate(t.getStop());
//                    pt.setUniqueId(t.getUniqueID());
//                    if (t.getParentTask() != null)
//                    {
//                        pt.setParentId(t.getParentTask().getID());
//                    }
//
//                    planTasks.add(pt);
//                    pt.setResourceName(r.getName());
//                }
//            }
//        }
//        //planTasks
//
//        try
//        {
//            mapper.deleteAll();
//            mapper.insertPlans(planTasks);
//        }
//        catch (Exception e)
//        {
//            e.printStackTrace();
//        }
//    }
//
//    @Override
//    public List<PlanTaskInfo> getAllTasksByDB()
//    {
//        return mapper.getAllTask();
//    }
//
//    @Override
//    public List<String> getAllResource()
//    {
//        return mapper.getAllResource();
//    }
//
//    @Override
//    public Map<String, List<PlanTaskInfo>> groupbyPlanType(List<PlanTaskInfo> list)
//    {
//        List<PlanTaskInfo> planed = new ArrayList<PlanTaskInfo>();
//        List<PlanTaskInfo> unplaned = new ArrayList<PlanTaskInfo>();
//        Map<String, List<PlanTaskInfo>> map = new HashMap<String, List<PlanTaskInfo>>();
//        for (PlanTaskInfo p : list)
//        {
//            if ("0".equals(p.getPlanType()))
//            {
//                planed.add(p);
//            }
//            else
//            {
//                unplaned.add(p);
//            }
//
//        }
//        map.put("planed", planed);
//        map.put("unplaned", unplaned);
//        return map;
//    }
//
//}
